<?php
/**
 * 首页控制器
 * 负责系统首页和基础接口
 */

declare(strict_types=1);

namespace app\controller;

use app\BaseController;
use think\facade\Db;
use think\facade\Config;
use think\response\Json;

class Index extends BaseController
{
    /**
     * 无需登录的方法
     */
    protected $noNeedLogin = ['index', 'hello', 'dbtest'];
    
    /**
     * API状态检查
     * @return Json
     */
    public function index(): Json
    {
        return $this->success([
            'version' => \think\facade\App::version(),
            'time' => date('Y-m-d H:i:s'),
            'environment' => app()->isDebug() ? 'development' : 'production'
        ], 'Backend API is working');
    }

    /**
     * 简单问候接口
     * @param string $name
     * @return Json
     */
    public function hello(string $name = 'ThinkPHP8'): Json
    {
        return $this->success([
            'message' => 'hello, ' . $name,
            'timestamp' => time()
        ], 'Hello from API');
    }
    
    /**
     * 数据库连接测试
     * @return Json
     */
    public function dbtest(): Json
    {
        try {
            // 测试数据库连接
            $version = Db::query('SELECT VERSION() as version')[0]['version'] ?? 'Unknown';
            $dbConfig = Config::get('database.connections.mysql');
            
            // 获取表列表
            $database = $dbConfig['database'];
            $tables = Db::query("SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = '{$database}' ORDER BY TABLE_NAME");
            
            // 检查用户表
            $prefix = $dbConfig['prefix'];
            $adminTable = $prefix . 'admin';
            $adminExists = !empty(Db::query("SHOW TABLES LIKE '{$adminTable}'"));
            
            $userCount = 0;
            if ($adminExists) {
                $userCount = Db::table($adminTable)->where('status', '>=', 0)->count();
            }
            
            return $this->success([
                'database' => $database,
                'version' => $version,
                'charset' => $dbConfig['charset'],
                'prefix' => $prefix,
                'table_count' => count($tables, '数据库连接测试成功'),
                'admin_table_exists' => $adminExists,
                'user_count' => $userCount,
                'connection_status' => 'connected',
                'test_time' => date('Y-m-d H:i:s')
            ]);
        } catch (\Exception $e) {
            return $this->error('数据库连接测试失败: ' . $e->getMessage(), 500, [
                'connection_status' => 'failed',
                'test_time' => date('Y-m-d H:i:s')
            ]);
        }
    }
    
    /**
     * 获取首页统计数据（预留接口）
     * @return Json
     */
    public function dashboard(): Json
    {
        try {
            $userId = $this->getUserId();
            
            if ($userId <= 0) {
                return $this->error('未登录或登录已过期', 401);
            }
            
            // TODO: 实现复杂的统计逻辑（根据原始项目的main方法）
            $stats = [
                'user_info' => $this->getCurrentUserInfo($userId),
                'menu_data' => $this->getUserMenuData($userId),
                'statistics' => $this->getBasicStatistics($userId),
                'pending_tasks' => $this->getPendingTasks($userId)
            ];
            
            return $this->success($stats, '获取首页数据成功');
        } catch (\Exception $e) {
            return $this->error('获取首页数据失败: ' . $e->getMessage(), 500);
        }
    }
    
    /**
     * 获取当前用户信息
     * @param int $userId
     * @return array
     */
    private function getCurrentUserInfo(int $userId): array
    {
        $user = Db::name('admin')
            ->alias('a')
            ->join('department d', 'a.did = d.id', 'LEFT')
            ->join('position p', 'a.position_id = p.id', 'LEFT')
            ->field('a.id, a.name, a.username, a.mobile, a.email, d.title as dept_name, p.title as position_name')
            ->where('a.id', $userId)
            ->where('a.status', '>=', 0)
            ->find();
        
        return $user ?: [];
    }
    
    /**
     * 获取用户菜单数据
     * @param int $userId
     * @return array
     */
    private function getUserMenuData(int $userId): array
    {
        // TODO: 实现菜单权限获取逻辑
        // 这里暂时返回空数组，后续实现复杂的权限逻辑
        return [];
    }
    
    /**
     * 获取基础统计数据
     * @param int $userId
     * @return array
     */
    private function getBasicStatistics(int $userId): array
    {
        // TODO: 实现原始项目main()方法中的复杂统计逻辑
        // 包括财务统计、客户统计、合同统计等
        return [
            'user_count' => Db::name('admin')->where('status', '>=', 0)->count(),
            'dept_count' => Db::name('department')->where('status', '>', 0)->count(),
            // 更多统计数据将在后续实现
        ];
    }
    
    /**
     * 获取待办任务
     * @param int $userId
     * @return array
     */
    private function getPendingTasks(int $userId): array
    {
        // TODO: 实现待办任务统计（审批类任务）
        // 这是原始项目中非常复杂的业务逻辑
        return [];
    }
}
